066 高级推荐模型之三:优化复杂目标函数

周三我们讨论了协同矩阵分解,其主要思想就是解决多个两两关系的矩阵分解,并且希望能够建立隐变量之间的共享。

今天,我们来看一个稍微不一样的话题,那就是如何优化更加复杂的目标函数

为什么需要复杂的目标函数

在介绍更复杂的目标函数之前,我们首先来回想一下,在之前的分享中,都接触到了哪些目标函数。

对于基于流行度或者相似度的推荐系统来说,其实并没有真正的目标函数的概念。这些推荐模型都是某种直观的“翻译”,这也导致了这些推荐系统很难直接使用在真实的应用中,往往是被当作特性用在其他模型中。

基于信息的推荐系统,本质上就是监督学习在推荐系统中的应用。因为是监督学习,那自然就需要目标函数。这里,经常是对点击率或者购买率进行建模,也就是说,经常使用二分分类的目标函数

当我们使用矩阵分解的架构来对用户和物品的关系进行建模时,绝大多数情况下我们是在讨论评分。对于评分信息,常用的其实是线性回归(Linear Regression),也有学者使用泊松回归,因为泊松回归对于整数变量的建模要好于线性回归。当然了,矩阵分解也可以扩展到对点击率或者购买率的建模。

当年Netflix竞赛之后,Netflix公司把获奖的矩阵分解拿来进行实现,放入线上系统中,结果发现并没有本质性地提高推荐效果,这其实就和目标函数有关。虽然Netflix竞赛造就了矩阵分解等类似模型的流行,但是逐渐地,研究人员和工业界从业人员也意识到,用户对物品的评分,并不是推荐系统需要优化的目标,也就是说目标函数“选错了”

那么,我们需要什么样的目标函数呢?

高级目标函数

直接对评分进行建模的最大问题,就是这和真实的推荐场景并不相符。不管是电商平台,还是新闻系统,我们并不是只在意用户对于某一些物品的评分。

真实的应用场景往往是这样的,用户打开应用,然后浏览一系列物品,由上往下进行翻阅,然后从中找到喜欢的物品。

这是不是很像我们在讨论搜索的时候,用户对于搜索结果的浏览?回忆一下,在搜索的场景中,我们首先输入关键字,然后搜索算法会返回一系列的结果。大多数情况下,我们会对返回的结果逐一检查。

在推荐场景下,我们虽然没有搜索关键词,但是整个从上往下的场景是类似的。

于是,我们就可以从搜索排序中得到启发,尝试对推荐结果进行排序。换句话说,我们并不在意用户的真实评分,或者我们是否能对用户和物品的喜好度进行完美估计,我们在意的是,能否把用户可能喜欢的物品排到前面去

把搜索系统中的排序思想利用到推荐系统中,是推荐系统的一个重大进步,这也让推荐系统和真实场景逐渐挂钩。

那么,很直观的,要想更改推荐系统的行为,从评分的预测到排序学习,我们需要更改目标函数。

参考文献[1]中提出了一种叫BPR的方法,是把配对法引入到推荐系统中的一个重要工作。我们快速回忆一下已经在搜索系统中介绍过的“配对排序学习”。简单说来,配对法就是希望,对于某一个查询关键词来说,学习到每一对文档之间的关系,然后通过把所有的两两关系都预测正确,从而建立一个完整的排序结果。

很明显,在推荐系统的场景下,没有查询关键词,但是我们依然可以通过构造“会话”(Session)来学习排序。

简单来说,我们针对用户来到应用后产生的会话,对用户交互过的物品进行建模训练。我们期望能把有“正交互信息”的物品排到“负交互信息”的物品之前。

值得注意的是,和搜索不一样,推荐系统往往没有明确的反馈信息。意思就是,在搜索系统中,我们有已知的标签信息,也就是哪一个文档是“相关”的,哪一个是“不相关”的。然而,在推荐系统中我们并没有这样的信息。

因此,所有用户和物品的交互都是“隐回馈”(Implicit Feedback)。我们必须依靠假设来找到相关的物品。在这里,我们假定有正交互信息的物品是比其他物品更加相关。于是,正交互的物品的预测值要高。这里的“正交互”可以是点击、购买或者其他信息。这就是BPR的基本思路。

需要强调的一点是,BPR仅仅是一种思路框架,我们可以应用到矩阵分解中,以及基于信息的推荐系统等不同的模型中。我们可以把矩阵分解中的对于评分的目标函数换成基于BPR的目标函数,也就是进行配对法训练,得到的推荐系统能够更好地对物品进行排序。

有了这个思路,我们就可以打开一系列的想法了。比如,我们在前面的搜索模块中讲过,其实还可以直接优化类似NDCG、MAP这样的指标。那能不能把这些想法也搬运到推荐系统中去呢?

简单的回答是,能。但是这个流程也不是那么显然易见的,毕竟我们没有直接的标签信息,而且一般来说,这些目标函数本身就已经很难优化了,我们还要嫁接到矩阵分解或者是分解机等模型上,这就会让优化的难度继续攀升。今天我们就不展开讨论这部分内容了。

小结

今天我为你讲了推荐系统的另外一个问题,那就是目标函数。

一起来回顾下要点:第一,我们分析了为什么要关注目标函数,以评分为基础的目标函数的问题;第二,我们详细介绍了BPR这种非常经典的配对法的目标函数。

最后,给你留一个思考题,如果我们能够对所有物品的喜好度进行精准预测,是不是就不需要BPR了呢?学习排序和对物品喜好度的预测是完全不同的两件事,还是相互之间有联系呢?

参考文献

  1. Steffen Rendle, Christoph Freudenthaler, Zeno Gantner, and Lars Schmidt-Thieme. BPR: Bayesian personalized ranking from implicit feedback. Proceedings of the Twenty-Fifth Conference on Uncertainty in Artificial Intelligence (UAI ‘09). AUAI Press, Arlington, Virginia, United States, 452-461, 2009.